package com.xiaoma.lru;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author xiaomacdut
 * @date 2020年3月6日 上午10:05:16
 */
public class LruHashMap<K, V>extends LinkedHashMap<K, V>{
    
    /** 初始容量 */
    private static final int INITIAL_CAPACITY = 16;
    /** 负载因子 */
    private static final float LOAD_FACTOR = 0.75f;
    /** 最大容量 */
    private final int maxCapacity;
    
    public LruHashMap(int maxCapacity){
        // 这里将accessOrder参数改为true,使每一次访问key之后,会把这个key放到链表的最后面
        super(INITIAL_CAPACITY, LOAD_FACTOR, true);
        this.maxCapacity = maxCapacity;
    }
    
    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest){
        // 达到我们限定的容量后,返回true
        // 返回true会导致链表的头节点被删除
        return size() > maxCapacity;
    }
}
